class: center, middle, inverse, title-slide # Dades ## Tècniques de Recerca ### 2021-2022 --- ## Tipus de variables  --- ### Numèriques Prenen autèntics valors numèrics, amb els que té sentit fer qualsevol operació matemàtica: .bg-yellow[`==`], `!=`, `>`, `>=`, `<`, `<=`, `*`, `/`, etc. #### Discretes - Només poden prendre valors enters, sense decimals. Per ex., el nombre d'habitants d'un municipi. #### Contínues - Poden prendre un nombre infinit de valors, incloent fraccions amb decimals. Per ex., el percentatge d'atur d'un municipi. --- ### Categòriques Prenen valors discrets sense propietats numèriques #### Ordinals - Es pot establir un ordre lògic entre categories - Operacions: `==`, `!=`, `>`, `>=`, `<`, `<=` - Veurem que en algunes circumstàncies les podem tractar com a variables numèriques, assignant valors numèrics a les categories #### Nominals - Cap ordre natural entre categories - Operacions: `==`, `!=` --- ## Exercici: quin tipus de variables? - Sexe: de l’entrevistat (home / dona) -- - Sexe: % de dones al municipi -- - Edat: de l’entrevistat (18, 19...) -- - Edat: de l’entrevistat (intervals: 18-35, 36-50, 51-75, 76+) -- - Ingressos: anuals de la llar, en € (30.000...) -- - Fills: nombre de fills de l’entrevistat (0, 1, 2...) -- - Estudis: acabats de l’entrevistat (cap, primària, secundària, universitaris...) -- - Nº de telèfon: de l’entrevistat (935801020...) -- - Codi postal: d'una adreça (08193...) --- ## Tipus de dades - **Enters** (_integer_): per exemple, -1, 0, 2 o 4097 (també -1L, 0L, 2L o 4097L) - **Numèrics** (_numeric_) o **dobles** (_double_): inclou enters més fraccions amb decimals, p. ex. 3.1416 o -24.932 - **Caràcters** (_character_ o _string_): qualsevol text indicat entre cometes, p. ex. "França", "Països Baixos", "22" o "Hola! :)" - **Lògics** (_logical_): només poden prendre dos valors, `TRUE` (o `T`) i `FALSE` (o `F`), sempre amb majúscules Hi ha altres tipus de dades de més complexes basades en algun d'aquests tipus bàsics, com les **dates** o els **factors**. --- ## Decimals Amb R sempre hem fer sevir el punt (`.`): ```r 2.75 * 100 ``` ``` ## [1] 275 ``` <br> Mai la coma (`,`): ```r 2,75 * 100 ``` ``` ## Error: <text>:1:2: inesperado ',' ## 1: 2, ## ^ ``` --- ## Vectors Són sèries de valors del mateix tipus. Es poden crear amb la funció `c()`, de "combinar" o "concatenar", amb els valors separats per comes. ```r assignatura <- c("Ciència Política", "Fonaments de Dret Públic", "Política Espanyola", "Relacions Internacionals", "Gestió Pública", "Política Comparada I") curs <- c(1, 1, 2, 2, 3, 3) nota <- c(6.7, 8.0, 6.2, 3.5, 7.8, 5.4) superada <- c(TRUE, TRUE, TRUE, FALSE, TRUE, TRUE) assignatura ## [1] "Ciència Política" "Fonaments de Dret Públic" ## [3] "Política Espanyola" "Relacions Internacionals" ## [5] "Gestió Pública" "Política Comparada I" curs ## [1] 1 1 2 2 3 3 nota ## [1] 6.7 8.0 6.2 3.5 7.8 5.4 superada ## [1] TRUE TRUE TRUE FALSE TRUE TRUE ``` --- ## Vectors Amb la funció `class()` demanem el tipus de dades de l'objecte. ```r class(assignatura) ## [1] "character" ``` - Feu-ho amb la resta de vectors. -- ```r class(curs) ## [1] "numeric" ``` ```r class(nota) ## [1] "numeric" ``` ```r class(superada) ## [1] "logical" ``` --- ## Coerció Què passa si barregem dades de diferent tipus en un mateix vector? ```r num_car <- c(1, 2, 3, "a") num_logic <- c(1, 2, 3, TRUE) car_logic <- c("a", "b", "c", TRUE) num_quatre <- c(1, 2, 3, "4") ``` Comproveu-ho imprimint-los i usant `class()`. --- ## Coerció R converteix el contingut del vector a un sol tipus, mirant de conservar el màxim d'informació possible. ```r (num_car <- c(1, 2, 3, "a")) ## [1] "1" "2" "3" "a" class(num_car) ## [1] "character" (num_logic <- c(1, 2, 3, TRUE)) ## [1] 1 2 3 1 class(num_logic) ## [1] "numeric" (car_logic <- c("a", "b", "c", TRUE)) ## [1] "a" "b" "c" "TRUE" class(car_logic) ## [1] "character" (num_quatre <- c(1, 2, 3, "4")) ## [1] "1" "2" "3" "4" class(num_quatre) ## [1] "character" ``` --- ## Coerció |Jerarquia|Complexitat |---|---:| |caràcter|++++ |doble|+++ |enter|++ |lògic|+ Es pot forçar la conversió a un tipus determinat amb les funcions `as.logical()`, `as.integer()`, `as.double()`, `as.numeric()` i `as.character()`. ```r (vector_logic <- c(T, F, F)) ## [1] TRUE FALSE FALSE (as.numeric(vector_logic)) ## [1] 1 0 0 (as.character(vector_logic)) ## [1] "TRUE" "FALSE" "FALSE" ``` --- ### Vectorització Què passa si fem operacions amb vectors? ```r x <- 1:10 x ## [1] 1 2 3 4 5 6 7 8 9 10 x + 10 ## [1] 11 12 13 14 15 16 17 18 19 20 x * 10 ## [1] 10 20 30 40 50 60 70 80 90 100 x ^ 2 ## [1] 1 4 9 16 25 36 49 64 81 100 log(x) ## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101 ## [8] 2.0794415 2.1972246 2.3025851 ``` --- ### Vectorització I si fem operacions entre vectors? ```r y <- c(1, 10) x * y ``` ``` ## [1] 1 20 3 40 5 60 7 80 9 100 ``` ```r z <- c(1, 10, 100) x * z ``` ``` ## [1] 1 20 300 4 50 600 7 80 900 10 ``` --- ## Marcs de dades - També anomenades _matrius_ o _conjunts_ de dades - Són conjunts rectangulars de variables (vectors) de la mateixa longitud - Les **columnes** representen variables, les **files** representen observacions i cadascuna de les **caselles** representa un valor  - És l'estructura fonamental d'anàlisi de dades a R --- ## Tibbles Sovint treballarem amb un tipus de marc de dades anomenat `tibble`. Podem crear tibbles manualment a partir de vectors individuals amb la funció `tibble()`: ```r notes <- tibble( assignatura = c("Ciència Política", "Fonaments de Dret Públic", "Política Espanyola", "Relacions Internacionals", "Gestió Pública", "Política Comparada I"), curs = c(1, 1, 2, 2, 3, 3), nota = c(6.7, 8.0, 6.2, 3.5, 7.8, 5.4), superada = c(TRUE, TRUE, TRUE, FALSE, TRUE, TRUE)) ``` --- ## Tibbles Si introduïm el nom del tibble ens mostra el seu contingut (o un breu resum): ```r notes ``` ``` ## # A tibble: 6 x 4 ## assignatura curs nota superada ## <chr> <dbl> <dbl> <lgl> ## 1 Ciència Política 1 6.7 TRUE ## 2 Fonaments de Dret Públic 1 8 TRUE ## 3 Política Espanyola 2 6.2 TRUE ## 4 Relacions Internacionals 2 3.5 FALSE ## 5 Gestió Pública 3 7.8 TRUE ## 6 Política Comparada I 3 5.4 TRUE ``` --- ### Exercici: crear un tibble - Per parelles - Obriu un script - Creeu un tibble (amb el nom `series`) recollint les notes que cadascun de vosaltres dona a 3 sèries que hagueu vist - Incloeu les variables següents: - `nom`: nom i cognoms de cadascú - `serie`: nom de la sèrie - `nota`: valoració entre 0 i 10 - Imprimiu el tibble - Guardeu l'script i lliureu-lo al Moodle --- ### Exercici: crear un tibble - Quantes variables té el marc de dades? - Quantes observacions? - Què representen les observacions? --- ## Llegir dades de paquets Normalment els tibbles no els crearem a mà sinó que els llegirem des de paquets o important arxius externs. Per llegir el marc de dades d'un paquet cal tenir el paquet **instal·lat** (recordeu: només cal fer-ho un cop per ordinador). Un cop instal·lat el paquet, podem fer accessibles les dades de dues maneres: - carregant el paquet: ```r library(nom_del_paquet) ``` - amb la funció `data()`: ```r data(nom_del_marc, package = "nom_del_paquet") ``` --- ### mpg Explorem el tibble `mpg` del paquet **ggplot2**. El podeu imprimir directament si heu carregat el **tidyverse**. ```r mpg ``` ``` ## # A tibble: 234 x 11 ## manufacturer model displ year cyl trans drv cty hwy fl class ## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> ## 1 audi a4 1.8 1999 4 auto(l~ f 18 29 p comp~ ## 2 audi a4 1.8 1999 4 manual~ f 21 29 p comp~ ## 3 audi a4 2 2008 4 manual~ f 20 31 p comp~ ## 4 audi a4 2 2008 4 auto(a~ f 21 30 p comp~ ## 5 audi a4 2.8 1999 6 auto(l~ f 16 26 p comp~ ## 6 audi a4 2.8 1999 6 manual~ f 18 26 p comp~ ## 7 audi a4 3.1 2008 6 auto(a~ f 18 27 p comp~ ## 8 audi a4 quat~ 1.8 1999 4 manual~ 4 18 26 p comp~ ## 9 audi a4 quat~ 1.8 1999 4 auto(l~ 4 16 25 p comp~ ## 10 audi a4 quat~ 2 2008 4 manual~ 4 20 28 p comp~ ## # ... with 224 more rows ``` --- ## Explorant un marc de dades Apart d'imprimir-lo escrivint el seu nom, podeu: - Si el marc de dades està en un paquet, consultar la documentació amb l'ajuda, p. ex. `?mpg` - Amb la funció `glimpse()` - Amb les funcions `head()` i `tail()` 👉 Mireu l'ajuda d'aquestes funcions - Amb la funció `View()` ⚠️ Compte amb la majúscula - Des de la pestanya _Environment_ --- ### Glimpse ```r glimpse(mpg) ``` ``` ## Rows: 234 ## Columns: 11 ## $ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "audi", "~ ## $ model <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quattro", "~ ## $ displ <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2.0, 2.~ ## $ year <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1999, 200~ ## $ cyl <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 8, 8, ~ ## $ trans <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)", "auto~ ## $ drv <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "4", "4~ ## $ cty <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17, 17, 1~ ## $ hwy <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25, 25, 2~ ## $ fl <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p~ ## $ class <chr> "compact", "compact", "compact", "compact", "compact", "c~ ``` <br> Una funció molt similar és `str()`. --- ### Head & tail ```r tail(mpg, n = 10) ``` ``` ## # A tibble: 10 x 11 ## manufacturer model displ year cyl trans drv cty hwy fl class ## <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> ## 1 volkswagen new be~ 2 1999 4 auto(l~ f 19 26 r subco~ ## 2 volkswagen new be~ 2.5 2008 5 manual~ f 20 28 r subco~ ## 3 volkswagen new be~ 2.5 2008 5 auto(s~ f 20 29 r subco~ ## 4 volkswagen passat 1.8 1999 4 manual~ f 21 29 p midsi~ ## 5 volkswagen passat 1.8 1999 4 auto(l~ f 18 29 p midsi~ ## 6 volkswagen passat 2 2008 4 auto(s~ f 19 28 p midsi~ ## 7 volkswagen passat 2 2008 4 manual~ f 21 29 p midsi~ ## 8 volkswagen passat 2.8 1999 6 auto(l~ f 16 26 p midsi~ ## 9 volkswagen passat 2.8 1999 6 manual~ f 18 26 p midsi~ ## 10 volkswagen passat 3.6 2008 6 auto(s~ f 17 26 p midsi~ ``` --- ### Exercici: inspeccionar un marc Obriu el marc de dades `gapminder` del paquet `gapminder`. Inspeccioneu-lo i responeu les preguntes següents: - Quantes observacions hi ha? - Quantes variables? - Què representa cadascuna de les observacions (files)? - Quina o quines variables identifiquen cada observació? - Què representa la darrera observació del marc? - De quin tipus és cadascuna de les variables? - Què mesura, i amb quines unitats, les variables `lifeExp`, `gdpPercap` i `pop`? --- ## Data frames Un altre tipus de marc de dades és el `data.frame`. La principal diferència és que el data frame es mostra sencer a la consola, mentre que el tibble només mostra les 10 primeres observacions i les variables que es puguin visualitzar a la pantalla. Podem convertir un data frame en un tibble i viceversa amb les funcions: - `as_tibble()` - `as.data.frame()` --- ## L'operador `$` Permet extreure una sola variable (vector) d'un marc de dades. ```r mpg$cyl ``` ``` ## [1] 4 4 4 4 6 6 6 4 4 4 4 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 4 4 6 6 6 ## [38] 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 8 8 8 8 6 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ## [75] 8 8 8 6 6 6 6 8 8 6 6 8 8 8 8 8 6 6 6 6 8 8 8 8 8 4 4 4 4 4 4 4 4 4 4 4 4 ## [112] 4 6 6 6 4 4 4 4 6 6 6 6 6 6 8 8 8 8 8 8 8 8 8 8 8 8 6 6 8 8 4 4 4 4 6 6 6 ## [149] 6 6 6 6 6 8 6 6 6 6 8 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 6 6 6 8 4 4 4 4 6 6 ## [186] 6 4 4 4 4 6 6 6 4 4 4 4 4 8 8 4 4 4 6 6 6 6 4 4 4 4 6 4 4 4 4 4 5 5 6 6 4 ## [223] 4 4 4 5 5 4 4 4 4 6 6 6 ``` ```r mean(mpg$cyl) ``` ``` ## [1] 5.888889 ``` ```r max(mpg$cyl) ``` ``` ## [1] 8 ``` --- ## Valors perduts R representa els valors perduts com `NA` (_not available_). ```r starwars ``` ``` ## # A tibble: 87 x 14 ## name height mass hair_color skin_color eye_color birth_year sex gender ## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> ## 1 Luke S~ 172 77 blond fair blue 19 male mascu~ ## 2 C-3PO 167 75 <NA> gold yellow 112 none mascu~ ## 3 R2-D2 96 32 <NA> white, bl~ red 33 none mascu~ ## 4 Darth ~ 202 136 none white yellow 41.9 male mascu~ ## 5 Leia O~ 150 49 brown light brown 19 fema~ femin~ ## 6 Owen L~ 178 120 brown, grey light blue 52 male mascu~ ## 7 Beru W~ 165 75 brown light blue 47 fema~ femin~ ## 8 R5-D4 97 32 <NA> white, red red NA none mascu~ ## 9 Biggs ~ 183 84 black light brown 24 male mascu~ ## 10 Obi-Wa~ 182 77 auburn, wh~ fair blue-gray 57 male mascu~ ## # ... with 77 more rows, and 5 more variables: homeworld <chr>, species <chr>, ## # films <list>, vehicles <list>, starships <list> ``` --- ## Valors perduts Si mirem de fer operacions amb variables que tinguin valors perduts, sovint el resultat serà `NA`. ```r mean(starwars$birth_year) ``` ``` ## [1] NA ``` Per ignorar els valors perduts, hem d'incloure l'argument `na.rm = TRUE`. ```r mean(starwars$birth_year, na.rm = TRUE) ``` ``` ## [1] 87.56512 ``` ✏️ Proveu les funcions següents: amb la mateixa variable `min()`, `max()`, `median()`, `range()`, `sd()`. --- ## Tipus de dades vs. tipus de variables Exploreu el marc de dades `babies` del paquet `openintro`. ```r data(babies, package = "openintro") ``` <br> - Què representen cadascuna de les observacions? - Quin tipus de dades són els vectors `parity` i `smoke`? - I quin tipus de variables? <br> -- 👉 Són variables **categòriques**, però codificades com a vectors **enters** (numèrics) ️❗❗❗️ El tipus de dades no sempre correspon lògicament amb el tipus de variable --- ### Exercici - Quines variables hi ha representades en aquest gràfic? - Mireu de deduir com està organitzat el marc de dades (files, columnes, valors): + Què són les observacions? + Quines variables? De quin tipus? <img src="data:image/png;base64,#img/fiona.png" width="75%" style="display: block; margin: auto;" /> <!-- Year, number of baby girls named Fiona born in that year, nation. --> --- ### Exercici  <!-- Release decade, TV rating, production country. --> --- ### Exercici Cada punt és el percentatge de vots positius sobre un tema en un any. <img src="data:image/png;base64,#img/un_votes.png" width="80%" style="display: block; margin: auto;" /> <!-- Year, percentage of Yes votes, issue, country. --> --- ### Exercici Cada punt és un aeroport.  <!-- Airport ownership, airport usage, region, latitude, and longitude. --> --- ### Llegir <br> - Wickham & Grolemund: Capítol 3. - RStudio Primers: The Basics > Visualization Basics